package com.ccp.dev.system.service;

import com.ccp.dev.core.basic.base.BaseService;
import com.ccp.dev.core.util.BeanUtils;
import com.ccp.dev.core.util.Convert;
import com.ccp.dev.system.dao.IndexLayoutDao;
import com.ccp.dev.system.model.IndexLayout;

import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * 首页布局 服务层实现
 *
 * @author wanghepeng
 * @date 2019-03-21
 */
@Service
public class IndexLayoutService extends BaseService<IndexLayout> {
    @Resource
    private IndexLayoutDao indexLayoutDao;

    /**
     * 查询首页布局信息
     *
     * @param id 首页布局ID
     * @return 首页布局信息
     */
    //todo 多余方法确定不会用到后删除
    public IndexLayout selectIndexLayoutById(String id) {
        return indexLayoutDao.selectIndexLayoutById(id);
    }

    /**
     * 查询首页布局列表
     *
     * @param indexLayout 首页布局信息
     * @return 首页布局集合
     */
    public List<IndexLayout> selectIndexLayoutList(IndexLayout indexLayout) {
        return indexLayoutDao.selectIndexLayoutList(indexLayout);
    }

    /**
     * 新增首页布局
     *
     * @param indexLayout 首页布局信息
     * @return 结果 //todo 对于结果的描述 int表示啥意思？其他方法同样修改
     */
    public int insertIndexLayout(IndexLayout indexLayout){
        return indexLayoutDao.insertIndexLayout(indexLayout);
    }

    /**
     * 修改首页布局
     *
     * @param indexLayout 首页布局信息
     * @return 结果
     */
    public int updateIndexLayout(IndexLayout indexLayout) {
        return indexLayoutDao.updateIndexLayout(indexLayout);
    }

    /**
     * 删除首页布局对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteIndexLayoutByIds(String ids) {
        return indexLayoutDao.deleteIndexLayoutByIds(Convert.toStrArray(ids));
    }

    /**
     * 渲染模板
     * <p>
     * String src = "hello ${name}";
     * Map map = new HashMap();
     * map.put("name", "world");
     * String s = indexLayoutService.renderTemplate(src, map);
     * System.out.println(s);
     *
     * @param templateHtml 模板
     * @param paraMap      参数
     * @return 结果
     */
    //todo 多余方法确定不会用到后删除
    public String renderTemplate(String templateHtml, Map<String, Object> paraMap) throws Exception {
        String result;
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
        StringTemplateLoader loader = new StringTemplateLoader();
        //Set<String> keys = paraMap.keySet();
        loader.putTemplate("myTemp1" , templateHtml);
        configuration.setTemplateLoader(loader);
        Template template = configuration.getTemplate("myTemp" , "UTF-8");
        Writer out = new StringWriter();
        template.process(paraMap, out);
        result = out.toString();
        out.close();
        return result;
    }

    /**
     * 根据布局id查询布局名称
     * @param ids 主键数组
     * @return nameList
     */
    public List<String> queryIndexLayoutNameByIds(String[] ids){
        if(BeanUtils.isEmpty(ids)){
            return null;
        }
        return indexLayoutDao.queryIndexLayoutNameByIds(Arrays.asList(ids));
    }

}
